package com.xzx.annotation.config;

import com.xzx.annotation.bean.Person;
import com.xzx.annotation.service.PersonService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;

/**
 * @author xinzhixuan
 * @version V1.0
 * @date 2018/7/14 15:45
 */
// 这个注解等价于一个xml配置文件
@Configuration
@ComponentScan(value = {"com.xzx.annotation"}, excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Controller.class),
        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = PersonService.class)})
//@ComponentScan  value:指定要扫描的包
//excludeFilters = Filter[] ：指定扫描的时候按照什么规则排除那些组件
//includeFilters = Filter[] ：指定扫描的时候只需要包含哪些组件
//FilterType.ANNOTATION：按照注解
//FilterType.ASSIGNABLE_TYPE：按照给定的类型；
//FilterType.ASPECTJ：使用ASPECTJ表达式
//FilterType.REGEX：使用正则指定
//FilterType.CUSTOM：使用自定义规则
public class MainConfig {

    // 这个标签等价一个bean标签， 返回值是class，方法名是bean的id
    @Bean
    public Person person() {
        return new Person("张三", 20);
    }
}
